/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package app.controller;

import app.entities.model.DAO.BimestreDAO;
import app.entities.model.DAO.ChamadaEletronicaDAO;
import app.entities.model.DAO.NotasAlunoDAO;
import app.entities.model.DAO.ProfessorDAO;
import app.entities.model.DAO.TurmaDAO;
import app.entities.model.DAOFactory.DaoFactory;
import app.entities.model.DTO.BimestreDTO;
import app.entities.model.DTO.ChamadaEletronicaDTO;
import app.entities.model.DTO.MatriculaAlunoDTO;
import app.entities.model.DTO.MatriculaProfessorDTO;
import app.entities.model.DTO.NotasAlunoDTO;
import app.entities.model.DTO.ProfessorDTO;
import app.entities.model.DTO.TurmaDTO;
import java.util.ArrayList;
import java.util.Date;

/**
 *
 * @author Murilo
 */
public class ControllerTurma {

    private TurmaDAO turmaDao;
    private ProfessorDAO professoresDao;
    private BimestreDAO bimestreDao;
    private NotasAlunoDAO notasAlunoDao;
    private ChamadaEletronicaDAO chamadaEletronicaDao;
    private ArrayList<TurmaDTO> ListaTurmas;

    public ControllerTurma() {
        this.turmaDao = DaoFactory.getTurmaDAO(1);
        this.professoresDao = DaoFactory.getProfessorDAO(1);
        this.bimestreDao = DaoFactory.getBimestreDAO(1);
        this.notasAlunoDao = DaoFactory.getNotasAlunoDAO(1);
        this.chamadaEletronicaDao = DaoFactory.getChamadaEletronicaDAO(1);
    }

    public void cadastrarTurma(String NomeDaMateria, MatriculaProfessorDTO Professor, ArrayList<MatriculaAlunoDTO> Alunos) {
        int IdTurma = (int) (Math.random() * 1000);
        this.ListaTurmas = this.turmaDao.listar();

        for (TurmaDTO turma : this.ListaTurmas) {
            if (turma.getId() == IdTurma) {
                IdTurma = (int) (Math.random() * 1000);
            }
        }
        TurmaDTO NovaTurma = new TurmaDTO(IdTurma, NomeDaMateria, Alunos, Professor);
        this.turmaDao.salvar(NovaTurma);
    }

    public ArrayList<ProfessorDTO> retornarListaProfessores() {
        return this.professoresDao.listar();
    }

    public ArrayList<TurmaDTO> retornarListaTurmas(String codigoProfessor) {
        ArrayList<TurmaDTO> listaRetorno = new ArrayList<>();
        this.ListaTurmas = this.turmaDao.listar();
        for (TurmaDTO turma : this.ListaTurmas) {
            if (turma.getProfessor().getCodigoMatricula().equals(codigoProfessor)) {
                listaRetorno.add(turma);
            }
        }
        return listaRetorno;
    }

    public void inserirNovoBimestre(TurmaDTO turma, int numeroBimestre) {
        int idBimestre = (int) (Math.random() * 1000);
        BimestreDTO bimestre = new BimestreDTO(idBimestre, numeroBimestre);
        this.bimestreDao.salvar(bimestre);
        turma.getBimestres().add(bimestre);
        this.turmaDao.atualizar(turma);
        System.out.println(String.valueOf(turma.getBimestres().get(0).getNumeroBimestre()));
    }

    public void lancarNotaAluno(TurmaDTO turma, int Bimestre, String codigoMatricula, float valorNota) {
        int idNotaAluno = (int) (Math.random() * 1000);
        int indiceBimestre = 0;
        for (int i = 0; i < turma.getBimestres().size(); i++) {
            if (turma.getBimestres().get(i).getNumeroBimestre() == Bimestre) {
                indiceBimestre = i;
            }
        }
        for (MatriculaAlunoDTO matAluno : turma.getAlunos()) {
            if (matAluno.getCodigoMatricula().equals(codigoMatricula)) {
                NotasAlunoDTO notaAluno = new NotasAlunoDTO(idNotaAluno, valorNota, matAluno);
                this.notasAlunoDao.salvar(notaAluno);
                turma.getBimestres().get(indiceBimestre).getNotasAlunos().add(notaAluno);
                this.bimestreDao.atualizar(turma.getBimestres().get(indiceBimestre));
                this.turmaDao.atualizar(turma);
            }
        }

    }

    public void fecharBimestre(TurmaDTO turma, int bimestre) {
        for (BimestreDTO bim : turma.getBimestres()) {
            if (bim.getNumeroBimestre() == bim.getNumeroBimestre()) {
                bim.setFechado(true);
                this.bimestreDao.atualizar(bim);
            }
        }
    }

    public void lancarChamada(TurmaDTO turma, ArrayList<MatriculaAlunoDTO> alunosPresentes, Date dataChamada) {
        int idChamada = (int) (Math.random() * 1000);
        ChamadaEletronicaDTO chamada = new ChamadaEletronicaDTO();
        chamada.setId(idChamada);
        chamada.setDataChamada(dataChamada);
        chamada.setMatriculasAlunos(alunosPresentes);
        this.chamadaEletronicaDao.salvar(chamada);
        turma.getListaPresenca().add(chamada);
        this.turmaDao.atualizar(turma);
    }
}
